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?
29 * FIXME, 2: use smp_[rw]mb() after each read/write?
32 #define acx_readl(val) le32_to_cpu(readl((val)))
33 #define acx_readw(val) le16_to_cpu(readw((val)))
35 #define acx_writew(val, port) writew(le16_to_cpu((val)), port)
36 #define acx_writel(val, port) writel(le32_to_cpu((val)), port)
38 static inline u32
read_reg32(acx_device_t
* adev
, unsigned int offset
)
40 #if ACX_IO_WIDTH == 32
41 return acx_readl((u8
*) adev
->iobase
+ adev
->io
[offset
]);
43 return acx_readw((u8
*) adev
->iobase
+ adev
->io
[offset
])
44 + (acx_readw((u8
*) adev
->iobase
+ adev
->io
[offset
] + 2) << 16);
48 static inline u16
read_reg16(acx_device_t
* adev
, unsigned int offset
)
50 return acx_readw((u8
*) adev
->iobase
+ adev
->io
[offset
]);
53 static inline u8
read_reg8(acx_device_t
* adev
, unsigned int offset
)
55 return readb((u8
*) adev
->iobase
+ adev
->io
[offset
]);
58 static inline void write_reg32(acx_device_t
* adev
, unsigned int offset
, u32 val
)
60 #if ACX_IO_WIDTH == 32
61 acx_writel(val
, (u8
*) adev
->iobase
+ adev
->io
[offset
]);
63 acx_writew(val
& 0xffff, (u8
*) adev
->iobase
+ adev
->io
[offset
]);
64 acx_writew(val
>> 16, (u8
*) adev
->iobase
+ adev
->io
[offset
] + 2);
68 static inline void write_reg16(acx_device_t
* adev
, unsigned int offset
, u16 val
)
70 acx_writew(val
, (u8
*) adev
->iobase
+ adev
->io
[offset
]);
73 static inline void write_reg8(acx_device_t
* adev
, unsigned int offset
, u8 val
)
75 writeb(val
, (u8
*) adev
->iobase
+ adev
->io
[offset
]);
78 #endif /* _ACX_UTIL_H_ */