Commit a4dd8722fab257ff23cd63483b2926a4e197be96

Authored by Maxime Ripard
1 parent 39dd65a059

sandbox: Expand list of IO accessors

The setbits/clrbits/clrsetbits macros are used widely across the tree,
let's provide implementation for them in the sandbox.

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>

Showing 1 changed file with 47 additions and 0 deletions Side-by-side Diff

arch/sandbox/include/asm/io.h
... ... @@ -56,6 +56,53 @@
56 56 void outw(unsigned int value, unsigned int addr);
57 57 void outb(unsigned int value, unsigned int addr);
58 58  
  59 +#define out_arch(type,endian,a,v) write##type(cpu_to_##endian(v),a)
  60 +#define in_arch(type,endian,a) endian##_to_cpu(read##type(a))
  61 +
  62 +#define out_le32(a,v) out_arch(l,le32,a,v)
  63 +#define out_le16(a,v) out_arch(w,le16,a,v)
  64 +
  65 +#define in_le32(a) in_arch(l,le32,a)
  66 +#define in_le16(a) in_arch(w,le16,a)
  67 +
  68 +#define out_be32(a,v) out_arch(l,be32,a,v)
  69 +#define out_be16(a,v) out_arch(w,be16,a,v)
  70 +
  71 +#define in_be32(a) in_arch(l,be32,a)
  72 +#define in_be16(a) in_arch(w,be16,a)
  73 +
  74 +#define out_8(a,v) writeb(v,a)
  75 +#define in_8(a) readb(a)
  76 +
  77 +#define clrbits(type, addr, clear) \
  78 + out_##type((addr), in_##type(addr) & ~(clear))
  79 +
  80 +#define setbits(type, addr, set) \
  81 + out_##type((addr), in_##type(addr) | (set))
  82 +
  83 +#define clrsetbits(type, addr, clear, set) \
  84 + out_##type((addr), (in_##type(addr) & ~(clear)) | (set))
  85 +
  86 +#define clrbits_be32(addr, clear) clrbits(be32, addr, clear)
  87 +#define setbits_be32(addr, set) setbits(be32, addr, set)
  88 +#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set)
  89 +
  90 +#define clrbits_le32(addr, clear) clrbits(le32, addr, clear)
  91 +#define setbits_le32(addr, set) setbits(le32, addr, set)
  92 +#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set)
  93 +
  94 +#define clrbits_be16(addr, clear) clrbits(be16, addr, clear)
  95 +#define setbits_be16(addr, set) setbits(be16, addr, set)
  96 +#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set)
  97 +
  98 +#define clrbits_le16(addr, clear) clrbits(le16, addr, clear)
  99 +#define setbits_le16(addr, set) setbits(le16, addr, set)
  100 +#define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set)
  101 +
  102 +#define clrbits_8(addr, clear) clrbits(8, addr, clear)
  103 +#define setbits_8(addr, set) setbits(8, addr, set)
  104 +#define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set)
  105 +
59 106 static inline void _insw(volatile u16 *port, void *buf, int ns)
60 107 {
61 108 }