diff options
author | Stuart Menefy <stuart.menefy@st.com> | 2009-08-24 04:26:39 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-08-24 04:26:39 -0400 |
commit | 8af57f8b4c0ada9063b1cee9d81e3e59f04ce5a2 (patch) | |
tree | 0a5395049fc234ad9cdbe97641628152afe4c1c7 | |
parent | 7d9c035150897c2bebedae280505513dbdef2abc (diff) |
sh: generic_in/outs{bwl} optimizations.
After performing the port2addr conversion, and checking that the data is
correctly aligned, simply call __raw_readsX/writesX. These have already been
optimised.
Signed-off-by: Stuart Menefy <stuart.menefy@st.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | arch/sh/kernel/io_generic.c | 50 |
1 files changed, 8 insertions, 42 deletions
diff --git a/arch/sh/kernel/io_generic.c b/arch/sh/kernel/io_generic.c index 5a7f554d9ca1..4ff507239286 100644 --- a/arch/sh/kernel/io_generic.c +++ b/arch/sh/kernel/io_generic.c | |||
@@ -73,35 +73,19 @@ u32 generic_inl_p(unsigned long port) | |||
73 | 73 | ||
74 | void generic_insb(unsigned long port, void *dst, unsigned long count) | 74 | void generic_insb(unsigned long port, void *dst, unsigned long count) |
75 | { | 75 | { |
76 | volatile u8 *port_addr; | 76 | __raw_readsb(__ioport_map(port, 1), dst, count); |
77 | u8 *buf = dst; | 77 | dummy_read(); |
78 | |||
79 | port_addr = (volatile u8 __force *)__ioport_map(port, 1); | ||
80 | while (count--) | ||
81 | *buf++ = *port_addr; | ||
82 | } | 78 | } |
83 | 79 | ||
84 | void generic_insw(unsigned long port, void *dst, unsigned long count) | 80 | void generic_insw(unsigned long port, void *dst, unsigned long count) |
85 | { | 81 | { |
86 | volatile u16 *port_addr; | 82 | __raw_readsw(__ioport_map(port, 2), dst, count); |
87 | u16 *buf = dst; | ||
88 | |||
89 | port_addr = (volatile u16 __force *)__ioport_map(port, 2); | ||
90 | while (count--) | ||
91 | *buf++ = *port_addr; | ||
92 | |||
93 | dummy_read(); | 83 | dummy_read(); |
94 | } | 84 | } |
95 | 85 | ||
96 | void generic_insl(unsigned long port, void *dst, unsigned long count) | 86 | void generic_insl(unsigned long port, void *dst, unsigned long count) |
97 | { | 87 | { |
98 | volatile u32 *port_addr; | 88 | __raw_readsl(__ioport_map(port, 4), dst, count); |
99 | u32 *buf = dst; | ||
100 | |||
101 | port_addr = (volatile u32 __force *)__ioport_map(port, 4); | ||
102 | while (count--) | ||
103 | *buf++ = *port_addr; | ||
104 | |||
105 | dummy_read(); | 89 | dummy_read(); |
106 | } | 90 | } |
107 | 91 | ||
@@ -145,37 +129,19 @@ void generic_outl_p(u32 b, unsigned long port) | |||
145 | */ | 129 | */ |
146 | void generic_outsb(unsigned long port, const void *src, unsigned long count) | 130 | void generic_outsb(unsigned long port, const void *src, unsigned long count) |
147 | { | 131 | { |
148 | volatile u8 *port_addr; | 132 | __raw_writesb(__ioport_map(port, 1), src, count); |
149 | const u8 *buf = src; | 133 | dummy_read(); |
150 | |||
151 | port_addr = (volatile u8 __force *)__ioport_map(port, 1); | ||
152 | |||
153 | while (count--) | ||
154 | *port_addr = *buf++; | ||
155 | } | 134 | } |
156 | 135 | ||
157 | void generic_outsw(unsigned long port, const void *src, unsigned long count) | 136 | void generic_outsw(unsigned long port, const void *src, unsigned long count) |
158 | { | 137 | { |
159 | volatile u16 *port_addr; | 138 | __raw_writesw(__ioport_map(port, 2), src, count); |
160 | const u16 *buf = src; | ||
161 | |||
162 | port_addr = (volatile u16 __force *)__ioport_map(port, 2); | ||
163 | |||
164 | while (count--) | ||
165 | *port_addr = *buf++; | ||
166 | |||
167 | dummy_read(); | 139 | dummy_read(); |
168 | } | 140 | } |
169 | 141 | ||
170 | void generic_outsl(unsigned long port, const void *src, unsigned long count) | 142 | void generic_outsl(unsigned long port, const void *src, unsigned long count) |
171 | { | 143 | { |
172 | volatile u32 *port_addr; | 144 | __raw_writesl(__ioport_map(port, 4), src, count); |
173 | const u32 *buf = src; | ||
174 | |||
175 | port_addr = (volatile u32 __force *)__ioport_map(port, 4); | ||
176 | while (count--) | ||
177 | *port_addr = *buf++; | ||
178 | |||
179 | dummy_read(); | 145 | dummy_read(); |
180 | } | 146 | } |
181 | 147 | ||