>>>>> On Wed, 15 Dec 2004 21:13:37 +0000 (GMT), "Maciej W. Rozycki"
>>>>> <email@example.com> said:
macro> As the whole file seemed a bit messy to me I decided to
macro> rewrite these functions/macros completely. To ease long-term
macro> maintenance I created common templates for all classes of
macro> accesses which expand to appropriate code for different
macro> transfer unit width. I made all operations to be expressed as
macro> inline functions to catch dangerous/incorrect uses. The result
macro> are the following function classes:
Thanks for your good job. I have a few comments/requests.
1. How about adding 'volatile' and '__iomem' to *read*()/*write*() ?
While some archs use 'volatile void __iomem *' and some are not, I
think *read*()/*write*()/ioremap()/iounmap() should use same type.
This will remove some compiler warnings.
2. How about using 'const void *' for outs*()? This will remove some
compiler warnings too.
3. In *in*()/*out*(), it would be better to call __swizzle_addr*()
AFTER adding mips_io_port_base. This unifies the meaning of the
argument of __swizzle_addr*() (always virtual address). Then,
mach-specific __swizzle_addr*() can to every evil thing based on
4. How about enclosing all *ioswab*() by '#ifndef' ? Also how about
passing virtual address to *ioswab*() ? I mean something like:
# ifndef ioswabw
# define ioswabw(a,x) le16_to_cpu(x)
# ifndef __raw_ioswabw
# define __raw_ioswabw(a,x) (x)
__val = pfx##ioswab##bwlq(__mem, val); \
Then we can provide mach-specific *ioswab*() in mach-*/mangle-port.h
and can do every evil thing based on its argument. It is usefull on
machines which have regions with defirrent endian conversion scheme.
Also, this can clean up CONFIG_SGI_IP22 from io.h
(mach-ip22/mangle-port.h can provide its own *ioswabw*()).