Commit a4dd8722fab257ff23cd63483b2926a4e197be96
1 parent
39dd65a059
Exists in
smarc_8mq_lf_v2020.04
and in
17 other branches
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 | } |