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