.. | .. |
---|
80 | 80 | ({ u16 __v = le16_to_cpu(*(__force volatile u16 *) (addr)); __v; }) |
---|
81 | 81 | |
---|
82 | 82 | #define rom_out_8(addr, b) \ |
---|
83 | | - ({u8 __w, __v = (b); u32 _addr = ((u32) (addr)); \ |
---|
| 83 | + (void)({u8 __maybe_unused __w, __v = (b); u32 _addr = ((u32) (addr)); \ |
---|
84 | 84 | __w = ((*(__force volatile u8 *) ((_addr | 0x10000) + (__v<<1)))); }) |
---|
85 | 85 | #define rom_out_be16(addr, w) \ |
---|
86 | | - ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \ |
---|
| 86 | + (void)({u16 __maybe_unused __w, __v = (w); u32 _addr = ((u32) (addr)); \ |
---|
87 | 87 | __w = ((*(__force volatile u16 *) ((_addr & 0xFFFF0000UL) + ((__v & 0xFF)<<1)))); \ |
---|
88 | 88 | __w = ((*(__force volatile u16 *) ((_addr | 0x10000) + ((__v >> 8)<<1)))); }) |
---|
89 | 89 | #define rom_out_le16(addr, w) \ |
---|
90 | | - ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \ |
---|
| 90 | + (void)({u16 __maybe_unused __w, __v = (w); u32 _addr = ((u32) (addr)); \ |
---|
91 | 91 | __w = ((*(__force volatile u16 *) ((_addr & 0xFFFF0000UL) + ((__v >> 8)<<1)))); \ |
---|
92 | 92 | __w = ((*(__force volatile u16 *) ((_addr | 0x10000) + ((__v & 0xFF)<<1)))); }) |
---|
93 | 93 | |
---|
.. | .. |
---|
107 | 107 | } |
---|
108 | 108 | |
---|
109 | 109 | static inline void raw_outsb(volatile u8 __iomem *port, const u8 *buf, |
---|
110 | | - unsigned int len) |
---|
| 110 | + unsigned int nr) |
---|
111 | 111 | { |
---|
112 | | - unsigned int i; |
---|
| 112 | + unsigned int tmp; |
---|
113 | 113 | |
---|
114 | | - for (i = 0; i < len; i++) |
---|
115 | | - out_8(port, *buf++); |
---|
| 114 | + if (nr & 15) { |
---|
| 115 | + tmp = (nr & 15) - 1; |
---|
| 116 | + asm volatile ( |
---|
| 117 | + "1: moveb %0@+,%2@; dbra %1,1b" |
---|
| 118 | + : "=a" (buf), "=d" (tmp) |
---|
| 119 | + : "a" (port), "0" (buf), |
---|
| 120 | + "1" (tmp)); |
---|
| 121 | + } |
---|
| 122 | + if (nr >> 4) { |
---|
| 123 | + tmp = (nr >> 4) - 1; |
---|
| 124 | + asm volatile ( |
---|
| 125 | + "1: " |
---|
| 126 | + "moveb %0@+,%2@; " |
---|
| 127 | + "moveb %0@+,%2@; " |
---|
| 128 | + "moveb %0@+,%2@; " |
---|
| 129 | + "moveb %0@+,%2@; " |
---|
| 130 | + "moveb %0@+,%2@; " |
---|
| 131 | + "moveb %0@+,%2@; " |
---|
| 132 | + "moveb %0@+,%2@; " |
---|
| 133 | + "moveb %0@+,%2@; " |
---|
| 134 | + "moveb %0@+,%2@; " |
---|
| 135 | + "moveb %0@+,%2@; " |
---|
| 136 | + "moveb %0@+,%2@; " |
---|
| 137 | + "moveb %0@+,%2@; " |
---|
| 138 | + "moveb %0@+,%2@; " |
---|
| 139 | + "moveb %0@+,%2@; " |
---|
| 140 | + "moveb %0@+,%2@; " |
---|
| 141 | + "moveb %0@+,%2@; " |
---|
| 142 | + "dbra %1,1b" |
---|
| 143 | + : "=a" (buf), "=d" (tmp) |
---|
| 144 | + : "a" (port), "0" (buf), |
---|
| 145 | + "1" (tmp)); |
---|
| 146 | + } |
---|
116 | 147 | } |
---|
117 | 148 | |
---|
118 | 149 | static inline void raw_insw(volatile u16 __iomem *port, u16 *buf, unsigned int nr) |
---|