5 * acx_util.h: define some utilities used all along the code.
7 * Copyright (c) 2008 Francis Galiegue <fgaliegue@gmail.com> for the ACX10
10 * This file is licensed under the GPLv2.
15 #include "acx_config.h" /* Needed for ACX_IO_WIDTH */
16 #include "acx_struct.h"
21 * Basically, make LE/BE safe versions of the OS routines.
23 * Declare them all static. They are ultra short operations anyway, and the
24 * header is reentrant, so no worries there.
26 * FIXME: some devices use ssb_*, whatever that turns out to be. Maybe this
27 * could be used instead of using self-constructed offsets?
31 #define acx_readl(val) le32_to_cpu(readl((val)))
32 #define acx_readw(val) le16_to_cpu(readw((val)))
34 #define acx_writew(val, port) writew(le16_to_cpu((val)), port)
35 #define acx_writel(val, port) writel(le32_to_cpu((val)), port)
37 static inline u32
read_reg32(acx_device_t
* adev
, unsigned int offset
)
39 #if ACX_IO_WIDTH == 32
40 return acx_readl((u8
*) adev
->iobase
+ adev
->io
[offset
]);
42 return acx_readw((u8
*) adev
->iobase
+ adev
->io
[offset
])
43 + (acx_readw((u8
*) adev
->iobase
+ adev
->io
[offset
] + 2) << 16);
47 static inline u16
read_reg16(acx_device_t
* adev
, unsigned int offset
)
49 return acx_readw((u8
*) adev
->iobase
+ adev
->io
[offset
]);
52 static inline u8
read_reg8(acx_device_t
* adev
, unsigned int offset
)
54 return readb((u8
*) adev
->iobase
+ adev
->io
[offset
]);
57 static inline void write_reg32(acx_device_t
* adev
, unsigned int offset
, u32 val
)
59 #if ACX_IO_WIDTH == 32
60 acx_writel(val
, (u8
*) adev
->iobase
+ adev
->io
[offset
]);
62 acx_writew(val
& 0xffff, (u8
*) adev
->iobase
+ adev
->io
[offset
]);
63 acx_writew(val
>> 16, (u8
*) adev
->iobase
+ adev
->io
[offset
] + 2);
67 static inline void write_reg16(acx_device_t
* adev
, unsigned int offset
, u16 val
)
69 acx_writew(val
, (u8
*) adev
->iobase
+ adev
->io
[offset
]);
72 static inline void write_reg8(acx_device_t
* adev
, unsigned int offset
, u8 val
)
74 writeb(val
, (u8
*) adev
->iobase
+ adev
->io
[offset
]);
77 #endif /* _ACX_UTIL_H_ */