1/*
2 * arch/xtensa/io.c
3 *
4 * IO primitives
5 *
6 * This program is free software; you can redistribute  it and/or modify it
7 * under  the terms of  the GNU General  Public License as published by the
8 * Free Software Foundation;  either version 2 of the  License, or (at your
9 * option) any later version.
10 *
11 * Copied from sparc.
12 *
13 * Chris Zankel <chris@zankel.net>
14 *
15 */
16
17#include <asm/io.h>
18#include <asm/byteorder.h>
19
20void outsb(unsigned long addr, const void *src, unsigned long count) {
21        while (count) {
22                count -= 1;
23                writeb(*(const char *)src, addr);
24                src += 1;
25                addr += 1;
26        }
27}
28
29void outsw(unsigned long addr, const void *src, unsigned long count) {
30        while (count) {
31                count -= 2;
32                writew(*(const short *)src, addr);
33                src += 2;
34                addr += 2;
35        }
36}
37
38void outsl(unsigned long addr, const void *src, unsigned long count) {
39        while (count) {
40                count -= 4;
41                writel(*(const long *)src, addr);
42                src += 4;
43                addr += 4;
44        }
45}
46
47void insb(unsigned long addr, void *dst, unsigned long count) {
48        while (count) {
49                count -= 1;
50                *(unsigned char *)dst = readb(addr);
51                dst += 1;
52                addr += 1;
53        }
54}
55
56void insw(unsigned long addr, void *dst, unsigned long count) {
57        while (count) {
58                count -= 2;
59                *(unsigned short *)dst = readw(addr);
60                dst += 2;
61                addr += 2;
62        }
63}
64
65void insl(unsigned long addr, void *dst, unsigned long count) {
66        while (count) {
67                count -= 4;
68                /*
69                 * XXX I am sure we are in for an unaligned trap here.
70                 */
71                *(unsigned long *)dst = readl(addr);
72                dst += 4;
73                addr += 4;
74        }
75}
76