hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/arch/m68k/include/asm/raw_io.h
....@@ -80,14 +80,14 @@
8080 ({ u16 __v = le16_to_cpu(*(__force volatile u16 *) (addr)); __v; })
8181
8282 #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)); \
8484 __w = ((*(__force volatile u8 *) ((_addr | 0x10000) + (__v<<1)))); })
8585 #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)); \
8787 __w = ((*(__force volatile u16 *) ((_addr & 0xFFFF0000UL) + ((__v & 0xFF)<<1)))); \
8888 __w = ((*(__force volatile u16 *) ((_addr | 0x10000) + ((__v >> 8)<<1)))); })
8989 #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)); \
9191 __w = ((*(__force volatile u16 *) ((_addr & 0xFFFF0000UL) + ((__v >> 8)<<1)))); \
9292 __w = ((*(__force volatile u16 *) ((_addr | 0x10000) + ((__v & 0xFF)<<1)))); })
9393
....@@ -107,12 +107,43 @@
107107 }
108108
109109 static inline void raw_outsb(volatile u8 __iomem *port, const u8 *buf,
110
- unsigned int len)
110
+ unsigned int nr)
111111 {
112
- unsigned int i;
112
+ unsigned int tmp;
113113
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
+ }
116147 }
117148
118149 static inline void raw_insw(volatile u16 __iomem *port, u16 *buf, unsigned int nr)