1/* 2 * Copyright 2004-2010 Analog Devices Inc. 3 * 4 * Licensed under the GPL-2 or later. 5 */ 6 7#ifndef _BFIN_IO_H 8#define _BFIN_IO_H 9 10#include <linux/compiler.h> 11#include <linux/types.h> 12#include <asm/byteorder.h> 13 14#define DECLARE_BFIN_RAW_READX(size, type, asm, asm_sign) \ 15static inline type __raw_read##size(const volatile void __iomem *addr) \ 16{ \ 17 unsigned int val; \ 18 int tmp; \ 19 __asm__ __volatile__ ( \ 20 "cli %1;" \ 21 "NOP; NOP; SSYNC;" \ 22 "%0 = "#asm" [%2] "#asm_sign";" \ 23 "sti %1;" \ 24 : "=d"(val), "=d"(tmp) \ 25 : "a"(addr) \ 26 ); \ 27 return (type) val; \ 28} 29DECLARE_BFIN_RAW_READX(b, u8, b, (z)) 30#define __raw_readb __raw_readb 31DECLARE_BFIN_RAW_READX(w, u16, w, (z)) 32#define __raw_readw __raw_readw 33DECLARE_BFIN_RAW_READX(l, u32, , ) 34#define __raw_readl __raw_readl 35 36extern void outsb(unsigned long port, const void *addr, unsigned long count); 37extern void outsw(unsigned long port, const void *addr, unsigned long count); 38extern void outsw_8(unsigned long port, const void *addr, unsigned long count); 39extern void outsl(unsigned long port, const void *addr, unsigned long count); 40#define outsb outsb 41#define outsw outsw 42#define outsl outsl 43 44extern void insb(unsigned long port, void *addr, unsigned long count); 45extern void insw(unsigned long port, void *addr, unsigned long count); 46extern void insw_8(unsigned long port, void *addr, unsigned long count); 47extern void insl(unsigned long port, void *addr, unsigned long count); 48extern void insl_16(unsigned long port, void *addr, unsigned long count); 49#define insb insb 50#define insw insw 51#define insl insl 52 53extern void dma_outsb(unsigned long port, const void *addr, unsigned short count); 54extern void dma_outsw(unsigned long port, const void *addr, unsigned short count); 55extern void dma_outsl(unsigned long port, const void *addr, unsigned short count); 56 57extern void dma_insb(unsigned long port, void *addr, unsigned short count); 58extern void dma_insw(unsigned long port, void *addr, unsigned short count); 59extern void dma_insl(unsigned long port, void *addr, unsigned short count); 60 61/** 62 * I/O write barrier 63 * 64 * Ensure ordering of I/O space writes. This will make sure that writes 65 * following the barrier will arrive after all previous writes. 66 */ 67#define mmiowb() do { SSYNC(); wmb(); } while (0) 68 69#include <asm-generic/io.h> 70 71#endif 72